use std::io;
fn main() {
    println!("Hello, world!");

    // 数组
    let arr: [i32; 5] = [1, 2, 3, 4, 5]; // i32是每个元素的类型。分号后的数字5 表示数组包含五个元素。 限制数组内有5个i32类型的值
    let arr1 = [3; 5]; // 数组arr1将包含5所有3最初设置为该值的元素
    println!("{:?}, {:?}", arr, arr1);

    // let mut c = String::new();
    // println!("c -> f32");
    // io::stdin().read_line(&mut c).expect("错误");
    // let c: f32 = c.trim().parse().expect("转换错误");

    // let f = c_to_f(c);
    // println!("f -> {}", f)

    let mut fib_number = String::new();
    println!("fib_number -> i32");
    io::stdin().read_line(&mut fib_number).expect("错误");
    let fib_number: i32 = fib_number.trim().parse().expect("转换错误");

    let f = fib(fib_number);
    println!("fib -> {:?}", f);

    // let element = arr[index];

    // let return_value = another_function(arr[0]);

    // println!("fn another_function return -> {}", return_value);

    // println!("arr[0] => {}", arr[0]);

    // if_fn(element);

    // println!("{} , {}", index, element);
}

// 函数传参
fn another_function(x: i32) -> i32 {
    println!("another_function => {}", x);
    x
}

// 控制流
fn if_fn(x: i32) {
    if x > 2 {
        println!("{} > 2", x);
    } else {
        println!("{} < 2", x);
    }

    // if x 会报错， rust 不会想 js 一样自动转换类型
    if x != 0 {
        println!("{}", x)
    }
}

// 循环
fn loop_fn(x: i32) {
    // loop
    loop {
        if x > 2 {
            break;
        }
    }

    // 命名 loop
    'loop_1: loop {
        if x > 2 {
            break 'loop_1;
        }
    }

    //循环返回值
    let mut num = 1;
    let result = loop {
        num += 1;
        if num == 10 {
            break num;
        }
    };

    println!("The result is {}", result);

    // while 循环
    while num < 9 {
        println!("num -> {}", num);
    }

    // for 循环
    let a = [1, 2, 3, 4, 5];
    for element in a {
        println!("the value is {}", element);
    }
}

// 华氏度转摄氏度
fn f_to_c(f: f32) -> f32 {
    (f - 32.00) * 5.00 / 9.00
}
// 摄氏度转换华氏度
fn c_to_f(c: f32) -> f32 {
    (c * 9.00 / 5.00) + 32.00
}

// 斐波那契数列

fn fib(n: i32) -> i32 {
    if n < 0 {
        panic!("input is zero");
    } else if (n == 1 || n == 2) {
        1
    } else {
        fib(n - 1) + fib(n - 2)
    }
}
